While a majority of the microprocessors used in personal computers may be 32-bit processors, there are applications that address larger amounts of virtual and physical memory. High-performance servers, computer aided design tools and database management systems, for example, can make use of larger address spaces and therefore may benefit from being able to perform computations on addresses more than 32-bits.
Modern computers often provide two distinct memory spaces: a virtual address space for the convenience of programmers, and a physical address space for system hardware designers. Extensions in digital data sizes are often made at convenient powers of two, for example: 8-, 16-, 32-, and 64-bits, etc. Practically though, it may not be necessary or economical to support a full 64-bit virtual address space in a microprocessor, let alone populate a 64-bit physical address space with memory. Therefore, a smaller address space may be defined, but defined in such a way as to provide for future expansions as necessary.
One form of an address, which may be useful for this purpose is called a canonical address form. For example, an address may be said to be in one type of canonical address form if all of the most significant bits, higher than some conveniently chosen number of address bits, are of the same value. That is to say that an M-bit virtual address space (M being an integer less than 64) may be supported inside a 64-bit virtual address space where all of the bits in the addresses starting from bit position M−1 to bit position 63 are of the same value (either all ones, or all zeroes).
An advantage of using canonical addresses is that expansion of the usable address space is possible. For example, an expansion from M bits to M+1 bits doubles the addressable storage space for newer programs while permitting older programs to execute correctly without modification.
One disadvantage of using an address in canonical form is that results of address computations may from time to time produce addresses that are not in a valid canonical form and so such results need to be checked to prevent errors. For example, if a 48-bit virtual address space is supported by a 64-bit canonical address then it may be necessary to check each of the most significant 16 bits (bit 63 through bit 48) against the value of the 48th bit (bit 47) to determine whether an address computation has produced a result in canonical form.
Another disadvantage is that the upper address bits do not provide addressing functionality, yet their support may require additional storage space, wider interconnects and additional digital logic. Any or all of these requirements may contribute to undesirable business consequences such as added costs and lower yields.